package com.app.gamev2.utils

import android.content.Context
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import com.app.gamev2.R

/**
 * 动画工具类，统一管理游戏中的动画
 */
object AnimationUtils {
    /**
     * 加载并启动气球跳跃动画
     * @param context 上下文
     * @param view 需要应用动画的视图
     * @param listener 动画监听（可选）
     */
    fun startPlayerJumpAnimation(context: Context, view: View, listener: Animation.AnimationListener? = null) {
        val jumpAnim = AnimationUtils.loadAnimation(context, R.anim.player_jump)
        listener?.let { jumpAnim.setAnimationListener(it) }
        view.startAnimation(jumpAnim)
    }

    /**
     * 加载并启动气球落地动画
     * @param context 上下文
     * @param view 需要应用动画的视图
     * @param listener 动画监听（可选）
     */
    fun startPlayerLandAnimation(context: Context, view: View, listener: Animation.AnimationListener? = null) {
        val landAnim = AnimationUtils.loadAnimation(context, R.anim.player_land)
        listener?.let { landAnim.setAnimationListener(it) }
        view.startAnimation(landAnim)
    }

    /**
     * 加载并启动氦气罐合并动画
     * @param context 上下文
     * @param view 需要应用动画的视图
     * @param listener 动画监听（可选）
     */
    fun startBucketMergeAnimation(context: Context, view: View, listener: Animation.AnimationListener? = null) {
        val mergeAnim = AnimationUtils.loadAnimation(context, R.anim.bucket_merge)
        listener?.let { mergeAnim.setAnimationListener(it) }
        view.startAnimation(mergeAnim)
    }

    /**
     * 加载并启动高度数值变化动画
     * @param context 上下文
     * @param view 需要应用动画的视图
     * @param listener 动画监听（可选）
     */
    fun startHeightChangeAnimation(context: Context, view: View, listener: Animation.AnimationListener? = null) {
        val heightAnim = AnimationUtils.loadAnimation(context, R.anim.height_change)
        listener?.let { heightAnim.setAnimationListener(it) }
        view.startAnimation(heightAnim)
    }

    /**
     * 停止视图的所有动画
     * @param view 需要停止动画的视图
     */
    fun stopAllAnimations(view: View) {
        view.clearAnimation()
    }

    /**
     * 检查视图是否正在进行动画
     * @param view 需要检查的视图
     * @return 是否正在进行动画
     */
    fun isAnimationRunning(view: View): Boolean {
        val animation = view.animation
        return animation != null && !animation.hasEnded()
    }

    /**
     * 创建自定义的缩放动画
     * @param context 上下文
     * @param fromScale 起始缩放比例
     * @param toScale 结束缩放比例
     * @param duration 动画持续时间（毫秒）
     * @return 创建的缩放动画
     */
    fun createScaleAnimation(
        context: Context,
        fromScale: Float,
        toScale: Float,
        duration: Long
    ): Animation {
        val animation = AnimationUtils.loadAnimation(context, android.R.anim.fade_in)
        animation.duration = duration
        // 注意：这里只是一个示例，实际使用时可能需要创建自定义的缩放动画
        return animation
    }
}